package com.cykj.order.service;

import com.cykj.order.domain.BsOrders;
import com.cykj.order.domain.BsRegion;
import com.cykj.order.domain.vo.BsOrdersVo;

import java.util.List;

/**
 * 订单缓存服务接口
 * 
 * @author cykj
 * @date 2025-08-20
 */
public interface OrderCacheService {
    
    /**
     * 缓存订单状态
     * 
     * @param orderId 订单ID
     * @param status 订单状态
     */
    void cacheOrderStatus(Long orderId, Integer status);
    
    /**
     * 获取缓存的订单状态
     * 
     * @param orderId 订单ID
     * @return 订单状态，null表示未缓存
     */
    Integer getCachedOrderStatus(Long orderId);
    
    /**
     * 删除订单状态缓存
     * 
     * @param orderId 订单ID
     */
    void removeOrderStatusCache(Long orderId);
    
    /**
     * 缓存订单详情
     * 
     * @param orderVo 订单详情
     */
    void cacheOrderInfo(BsOrdersVo orderVo);
    
    /**
     * 获取缓存的订单详情
     * 
     * @param orderId 订单ID
     * @return 订单详情，null表示未缓存
     */
    BsOrdersVo getCachedOrderInfo(Long orderId);
    
    /**
     * 删除订单详情缓存
     * 
     * @param orderId 订单ID
     */
    void removeOrderInfoCache(Long orderId);
    
    /**
     * 缓存地区树结构
     * 
     * @param regionTree 地区树
     */
    void cacheRegionTree(List<BsRegion> regionTree);
    
    /**
     * 获取缓存的地区树结构
     * 
     * @return 地区树列表，null表示未缓存
     */
    List<BsRegion> getCachedRegionTree();
    
    /**
     * 删除地区树缓存
     */
    void removeRegionTreeCache();
    
    /**
     * 增加店铺订单状态计数
     * 
     * @param shopId 店铺ID
     * @param status 订单状态
     */
    void incrementOrderStatusCount(Long shopId, Integer status);
    
    /**
     * 减少店铺订单状态计数
     * 
     * @param shopId 店铺ID
     * @param status 订单状态
     */
    void decrementOrderStatusCount(Long shopId, Integer status);
    
    /**
     * 获取店铺订单状态统计
     * 
     * @param shopId 店铺ID
     * @param status 订单状态
     * @return 订单数量
     */
    Long getOrderStatusCount(Long shopId, Integer status);
    
    /**
     * 缓存订单列表
     * 
     * @param queryParams 查询参数
     * @param orderList 订单列表
     */
    void cacheOrderList(BsOrders queryParams, List<BsOrdersVo> orderList);
    
    /**
     * 获取缓存的订单列表
     * 
     * @param queryParams 查询参数
     * @return 订单列表，null表示未缓存
     */
    List<BsOrdersVo> getCachedOrderList(BsOrders queryParams);
    
    /**
     * 清理订单列表缓存（用于数据更新后）
     */
    void clearOrderListCache();
}
